#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
来信件服务优化启动脚本 - 避免重复加载字典
"""

import os
import sys
import subprocess
import time


def check_port_available(port):
    """检查端口是否可用"""
    import socket

    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.bind(("localhost", port))
            return True
    except OSError:
        return False


def start_service():
    """启动服务"""
    print("=" * 60)
    print("来信件服务优化启动脚本")
    print("=" * 60)

    # 检查当前目录
    current_dir = os.getcwd()
    print(f"当前工作目录: {current_dir}")

    # 检查配置文件
    config_file = "config.py"
    if not os.path.exists(config_file):
        print(f"❌ 配置文件 {config_file} 不存在")
        return False

    # 检查静态文件目录
    static_dir = os.path.join(os.path.dirname(current_dir), "static")
    if not os.path.exists(static_dir):
        print(f"❌ 静态文件目录 {static_dir} 不存在")
        return False

    # 检查监控页面文件
    monitor_file = os.path.join(static_dir, "laixin_index.html")
    if not os.path.exists(monitor_file):
        print(f"❌ 监控页面文件 {monitor_file} 不存在")
        return False

    print("✅ 所有必要文件检查通过")

    # 检查端口
    port = 8106
    if not check_port_available(port):
        print(f"⚠️  端口 {port} 已被占用，请检查是否有其他服务在运行")
        print("   您可以:")
        print("   1. 停止占用端口的服务")
        print("   2. 修改 config.py 中的端口配置")
        return False

    print(f"✅ 端口 {port} 可用")

    # 设置环境变量，优化启动过程
    env = os.environ.copy()
    env["PYTHONPATH"] = (
        os.path.dirname(current_dir) + os.pathsep + env.get("PYTHONPATH", "")
    )

    # 启动服务
    print("\n🚀 正在启动来信件服务...")
    print("💡 优化说明:")
    print("   - 避免重复加载字典")
    print("   - 只在主进程中初始化数据库")
    print("   - 支持热重载但避免重复初始化")

    try:
        # 使用 subprocess 启动服务
        process = subprocess.Popen([sys.executable, "app.py"], cwd=current_dir, env=env)

        print("✅ 服务启动成功！")
        print("\n📱 访问地址:")
        print(f"   监控界面: http://127.0.0.1:{port}/static/laixin_index.html")
        print(f"   API文档:  http://127.0.0.1:{port}/docs")
        print(f"   健康检查: http://127.0.0.1:{port}/health")
        print(f"   API信息:  http://127.0.0.1:{port}/api")

        print("\n💡 优化特性:")
        print("   1. 字典只加载一次（主进程）")
        print("   2. 数据库只初始化一次（主进程）")
        print("   3. 热重载进程跳过重复初始化")
        print("   4. 按 Ctrl+C 停止服务")

        # 等待用户中断
        try:
            process.wait()
        except KeyboardInterrupt:
            print("\n🛑 收到停止信号，正在关闭服务...")
            process.terminate()
            process.wait()
            print("✅ 服务已停止")

    except Exception as e:
        print(f"❌ 启动服务失败: {str(e)}")
        return False

    return True


if __name__ == "__main__":
    start_service()
